import numpy as np
import math

'''
参数说明
三天为1个大周期 将快件处理时间分为9个小时间段 每天0-14、14-18、18-0
H_1 ：设备1在每个时间段内的可工作时长
P：每天每时段存件时间
M：每小时存件数
X_1：设备1每小时处理件数
X_2：设备2每小时处理件数
m：现有设备1数量
come：每时段存件数
help：设备1每时段空档时段内可帮下一时段处理的工作时间
gap_come：每时段空档时间来件数
deal_num：所需设备1每时段总处理能力
reserve：设备1总工作余力
left：每时段实际还需处理的件数
'''

H_1 = np.array([13, 3, 6, 12, 4, 5, 13, 3, 5])
H_2 = np.array([13, 4, 6, 13, 3, 6, 13, 3, 6])
P = np.array([14, 4, 6])
M = 5348
X_1 = 400
X_2 = 500
m = 12

come = M * P
come = np.tile(come,  3)
#print(come)

help = np.array([2,1,2,2,2,2,2,2,1])
gap_come = M * help
#print(gap_come)

reserve = np.zeros(9) - 1
#reserve初始化为-1 方便break判断

#问题一
for n in range(m,100):
    deal_num = n * H_1 * X_1
    reserve[0] = deal_num[0] - come[0]
    for i in range(1,9):
        if reserve[i-1]<0:
            break
        else:
            left = come[i] - min(reserve[i-1], gap_come[i-1])
        reserve[i] = deal_num[i] - left
    if reserve[8] >= 0:
        print(n)
        break

#问题二
'''
Z：一个大周期内（3days）总共收件数
H_1_sum：设备1在一个大周期内总工作时长
H_2_sum：设备2在一个大周期内总工作时长
w_1：设备1成本比
w_2：设备2成本比
rest：现有设备无法处理的剩余件数
x1：还需新增设备1数量
x2：还需新增设备2数量
cost_1：新增设备1的成本
cost_2：新增设备2的成本
v1：设备1平均处理快件速度
v2：设备2平均处理快件速度
eff_1：设备 1 新增设备利用率
eff_2：设备 2 新增设备利用率
'''
# Z = M * 24 * 3
Z = 385030
H_1_sum = H_1.sum()
H_2_sum = H_2.sum()
w_1 = 1
w_2 = 1.5 * w_1
rest = Z - m * H_1_sum * X_1
print(rest)

x1 = math.ceil(rest / (H_1_sum * X_1))
x2 = math.ceil(rest / (H_2_sum * X_2))
print(x1)
print(x2)

cost_1 = x1 * w_1
cost_2 = x2 * w_2
print(cost_1)
print(cost_2)

v1 = X_1 * (8 / 9)
v2 = X_2 * (12 / 13)

eff_1 = (rest / 72) / (v1 * x1)
eff_2 = (rest / 72) / (v2 * x2)
print(eff_1)
print(eff_2)
